/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package futco.patrones.syscand.managedbean.gestionar;

import futco.patrones.syscand.entidades.Empresa;
import futco.patrones.syscand.facade.EmpresaFacade;
import futco.patrones.syscand.jsf.framework.internacionalizacion.IMensajes;
import futco.patrones.syscand.jsf.framework.internacionalizacion.Internacionalizacion;
import futco.patrones.syscand.jsf.framework.util.Mensajes;
import futco.patrones.syscand.managedbean.framework.facesconverter.JsfUtil;
import java.io.Serializable;
import java.util.LinkedList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;

import javax.faces.bean.ManagedBean;



import javax.faces.bean.ViewScoped;
import javax.faces.component.UIComponent;
import javax.faces.event.ActionEvent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import javax.faces.model.SelectItem;
import org.apache.log4j.Logger;

/**
 *
 * @author esao
 */
//@Named(value = "empresaManagedBean")
//@Dependent
@ManagedBean
@ViewScoped
public class EmpresaManagedBean implements Serializable {

    @EJB
    private EmpresaFacade facade;
    private Empresa empresa;
    private List<Empresa> empresas;
    private Empresa empresaSeleccionada;
    protected static Logger log = Logger.getLogger(EmpresaManagedBean.class);

    public void guardar(ActionEvent actionEvent) {
        log.info("guardar");
        try {
            log.info(empresa);
            getFacade().guardar(empresa);
            empresas = getFacade().buscarTodo();
            Mensajes.mensajeInformacion(empresa, Internacionalizacion.getInstancia().getEtiqueta(IMensajes.MENSAJE_INFORMACION_GUARDAD));
            limpiarObjeto();

        } catch (Exception e) {
            Mensajes.mensajeError(e, e);
            log.error(e.getCause(), e);

        }
    }

    public void nuevoRegistro(ActionEvent actionEvent) {
        log.info("nuevoRegistro");
        empresa = new Empresa();

    }

    public void seleccionarRegistro() {
        log.info("seleccionarRegistro");

        empresa = empresaSeleccionada;
    }

    public void eliminar(ActionEvent actionEvent) {
        log.info("eliminar");
        try {
            getFacade().eliminar(empresa);
            empresas = getFacade().buscarTodo();
            Mensajes.mensajeInformacion(Internacionalizacion.getInstancia().getEtiqueta(IMensajes.MENSAJE_INFORMACION_BORRADA), empresa);
            limpiarObjeto();
        } catch (Exception e) {
            Mensajes.mensajeError(e, e);
            log.error(e.getCause(), e);

        }
    }

    @PostConstruct
    public void init() {
        log.info("init");

        empresas = getFacade().buscarTodo();


    }

    /** Creates a new instance of EmpresaManagedBean */
    public EmpresaManagedBean() {
        log.debug("EmpresaManagedBean");
        empresa = new Empresa();
        empresas = new LinkedList<Empresa>();


    }

    private void limpiarObjeto() {
        log.info("limpiarObjeto");
        empresa = new Empresa();

    }

    /**
     * @return the empresa
     */
    public Empresa getEmpresa() {
        return empresa;
    }

    /**
     * @param empresa the empresa to set
     */
    public void setEmpresa(Empresa empresa) {
        this.empresa = empresa;
    }

    /**
     * @return the empresas
     */
    public List<Empresa> getEmpresas() {
        return empresas;
    }

    /**
     * @param empresas the empresas to set
     */
    public void setEmpresas(List<Empresa> empresas) {
        this.empresas = empresas;
    }

    public Empresa getEmpresaSeleccionada() {
        return empresaSeleccionada;
    }

    public void setEmpresaSeleccionada(Empresa empresaSeleccionada) {
        this.empresaSeleccionada = empresaSeleccionada;
    }

    public SelectItem[] getItemsAvailableSelectOne() {
        return JsfUtil.getSelectItems(getFacade().buscarTodo(), true);
    }

    /**
     * @return the facade
     */
    public EmpresaFacade getFacade() {
        return facade;
    }

    /**
     * @param facade the facade to set
     */
    public void setFacade(EmpresaFacade facade) {
        this.facade = facade;
    }

    @FacesConverter(forClass = Empresa.class)
    public static class EmpresaControllerConverter implements Converter {

        @Override
        public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
            if (value == null || value.length() == 0) {
                return null;
            }
            EmpresaManagedBean controller = (EmpresaManagedBean) facesContext.getApplication().getELResolver().
                    getValue(facesContext.getELContext(), null, "empresaManagedBean");
            return controller.getFacade().buscar(getKey(value));
        }

        private java.lang.Integer getKey(String value) {
            java.lang.Integer key;
            key = Integer.valueOf(value);
            return key;
        }

        private String getStringKey(java.lang.Integer value) {
            StringBuilder sb = new StringBuilder();
            sb.append(value);
            return sb.toString();
        }

        @Override
        public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
            if (object == null) {
                return null;
            }
            if (object instanceof Empresa) {
                Empresa o = (Empresa) object;
                return getStringKey(o.getSecuencia());
            } else {
                throw new IllegalArgumentException("Error");
            }
        }
    }
}
